package CompteBancaire;

import _Banque.CompteBancaire;
import _Banque.Titulaire;
import _Banque.interfaces.IBanque;
import _Tests.Tests;

//
// IUT de Nice / Departement informatique / Module APO-C++
// Annee 2008_2009 - Package _Banque
//
// Classe CompteBancaire - Tests unitaires des cas d'anomalies
//
// Auteur : A. Thuaire
//
public class T_CompteBancaire_A1 implements IBanque {

	public static void main(String[] args) throws Throwable
	{
	   Tests.Begin("_Banque.CompteBancaire", "1.2.0");
	   
	   Boolean bTrue = new Boolean(true);

	   String adresse_1 = "Imm. Les Magnolias Bat. 2, 8 Bd Napoleon III - NICE (06000)";
	   String adresse_2 = "Villa Beau Sejour, 115 Av. de la Grande Armee - PARIS (75000)";

	   Titulaire dupuy = new Titulaire("DUPUY", "melanie", "1978/04/25", adresse_1);
	   Titulaire durand = new Titulaire("Durand", "Paul", "1981/01/03",  adresse_2);

	      Tests.Design("Controle des anomalies de construction", 3);
	      int compteur= 0;
	   
	         Tests.Case("Controle duplication d'un element neutre"); {
	         CompteBancaire neutre = new CompteBancaire();

	            try {neutre.clone();}
	            catch (Exception e) {  
	               Tests.Unit(bTrue, new Boolean(e instanceof CloneNotSupportedException));
	               compteur++;
	            }
	         }

	         Tests.Case("Controle duplication d'un element quelconque"); {
	         CompteBancaire cpt = new CompteBancaire(durand);

	            try {cpt.clone();}
	            catch (Exception e) {  
		               Tests.Unit(bTrue, new Boolean(e instanceof CloneNotSupportedException));
		               compteur++;
	            }
	         }

	         Tests.Case("Controle validite premier parametre"); {
	         CompteBancaire cpt = new CompteBancaire(dupuy);

	            try {cpt.executer('X',"xxx", 100.f);}
	            catch (Throwable e) {  
	               Tests.Unit("-3.2", e.getMessage()); compteur++;
	            }
	         }

	         Tests.Case("Controle validite second parametre"); {
	         CompteBancaire cpt = new CompteBancaire(dupuy);

	            try {cpt.executer(VERSEMENT, null, 100.f);}
	            catch (Throwable e) {  
	               Tests.Unit("-3.2", e.getMessage()); compteur++;
	            }
	         }

	         Tests.Case("Controle validite troisieme parametre"); {
	         CompteBancaire cpt = new CompteBancaire(dupuy);

	            try {cpt.executer(VERSEMENT, "xxx", -100.f);}
	            catch (Throwable e) {  
	               Tests.Unit("-3.2", e.getMessage()); compteur++;
	            }
	         }

	         Tests.Case("Controle validite d'un retrait"); {
	         CompteBancaire cpt = new CompteBancaire(dupuy);

	            cpt.executer(VERSEMENT, "xxxx", 100.f);

	            try {cpt.executer(RETRAIT, "xxx", 200.f);}
	            catch (Throwable e) {  
	               Tests.Unit("-3.0", e.getMessage()); compteur++;
	            }
	         }

	         Tests.Case("Synthese des controles d'anomalies"); {

	            Tests.Unit(6, compteur);
	         }

	   Tests.End();
	}
}